package programa;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import vistas.VistaRecords;
import juego.Records;

public class Programa extends JFrame {
	private static final long serialVersionUID = 1L;
	private JPanel PanelPrincipal = null;
	private JButton CargarPartida = null;
	private JButton VerRecords = null;
	private JButton Salida = null;
	private JButton Comenzar = null;
	private JButton IngresarNombre = null;
	private JLabel mostrarPiloto = null;
	private JLabel fondo = null;
	private JFrame jFrame = null;
	private String nombreJugador = "";
	private JFrame IngNombre = null;
	private JPanel Nombre = null;
	private JButton Aceptar = null;
	private JButton Cancelar = null;
	private JLabel Piloto = null;
	private JTextField textoNombre = null;

	private JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(590, 560));
			jFrame.setContentPane(getPanelPrincipal());
			jFrame.setBackground(Color.BLACK);
			jFrame.setTitle("Algo42 - Salva al mundo!");
			jFrame.setLocation(new Point(300, 100));
			jFrame.setResizable(false);

			addWindowListener(new WindowAdapter() {
				@Override
				public void windowClosing(WindowEvent e) {
					dispose();
					// System.exit(0);
				}
			});

		}
		return jFrame;
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Programa();
			}
		});
	}

	public Programa() {
		this.getJFrame().setVisible(true);
	};

	private JPanel getPanelPrincipal() {
		if (PanelPrincipal == null) {
			fondo = new JLabel();
			fondo.setBounds(new Rectangle(-3, -3, 588, 531));
			fondo.setIcon(new ImageIcon(getClass().getResource(
					"/images/fondo.jpg")));
			fondo.setBackground(Color.BLACK);
			mostrarPiloto = new JLabel();
			mostrarPiloto.setBounds(new Rectangle(220, 163, 286, 40));
			mostrarPiloto.setFont(new Font("Monotype Corsiva", Font.PLAIN, 24));
			mostrarPiloto.setForeground(new Color(0, 102, 255));
			mostrarPiloto.setText("Piloto: <nuevo>");
			PanelPrincipal = new JPanel();
			PanelPrincipal.setLayout(null);
			PanelPrincipal.add(getComenzar(), null);
			PanelPrincipal.add(getCargarPartida(), null);
			PanelPrincipal.add(getVerRecords(), null);
			PanelPrincipal.add(getSalida(), null);
			PanelPrincipal.add(mostrarPiloto, null);
			PanelPrincipal.add(fondo, null);
		}
		return PanelPrincipal;
	}

	private JButton getComenzar() {
		if (Comenzar == null) {
			Comenzar = new JButton();
			Comenzar.setText("�A volar!");
			Comenzar.setSize(new Dimension(130, 45));
			Comenzar.setLocation(new Point(220, 255));
			Comenzar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (nombreJugador == "") {
						JFrame ingresar = getIngNombre();
						ingresar.setVisible(true);
					} else {
						Partida.getInstance().nuevaPartida(nombreJugador);
					}
				}
			});
		}
		return Comenzar;
	}

	private JButton getCargarPartida() {
		if (CargarPartida == null) {
			CargarPartida = new JButton();
			CargarPartida.setMnemonic(KeyEvent.VK_UNDEFINED);
			CargarPartida.setLocation(new Point(220, 370));
			CargarPartida.setSize(new Dimension(130, 30));
			CargarPartida.setText("Cargar partida");
			CargarPartida
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (nombreJugador == "") {
								JFrame ingresar = getIngNombre();
								ingresar.setVisible(true);
							}
							IngresarNombre.setVisible(false);
							Partida.getInstance().cargarPartida(nombreJugador);
						}
					});
		}
		return CargarPartida;
	}

	private JButton getVerRecords() {
		if (VerRecords == null) {
			VerRecords = new JButton();
			VerRecords.setText("Ver records");
			VerRecords.setSize(new Dimension(130, 30));
			VerRecords.setLocation(new Point(220, 420));
			VerRecords.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Records records = new Records();
					records.nuevoRecord("martu", 147);
					VistaRecords vis = new VistaRecords(records);
					jFrame.setVisible(false);
					vis.setVisible(true);
				}
			});
		}
		return VerRecords;
	}

	private JButton getSalida() {
		if (Salida == null) {
			Salida = new JButton();
			Salida.setText("SALIR");
			Salida.setSize(new Dimension(130, 30));
			Salida.setLocation(new Point(220, 470));
			Salida.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					dispose();
					System.exit(0);
				}
			});
		}
		return Salida;
	}

	private JFrame getIngNombre() {
		if (IngNombre == null) {
			IngNombre = new JFrame();
			IngNombre.setSize(new Dimension(368, 172));
			IngNombre.setTitle("Ingresar nombre");
			IngNombre.setLocation(new Point(400, 300));
			IngNombre.setContentPane(getNombre());
			IngNombre.setResizable(false);
		}
		return IngNombre;
	}

	private JPanel getNombre() {
		if (Nombre == null) {
			Piloto = new JLabel();
			Piloto.setForeground(Color.BLACK);
			Piloto.setBounds(new Rectangle(30, 38, 75, 44));
			Piloto.setText("Piloto:");
			Nombre = new JPanel();
			Nombre.setLayout(null);
			Nombre.add(getAceptar(), null);
			Nombre.add(getCancelar(), null);
			Nombre.add(getTextoNombre(), null);
			Nombre.add(Piloto, null);
		}
		return Nombre;
	}

	private JButton getAceptar() {
		if (Aceptar == null) {
			Aceptar = new JButton();
			Aceptar.setText("Aceptar");
			Aceptar.setBounds(new Rectangle(100, 96, 100, 25));
			Aceptar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					JTextField nombre = getTextoNombre();
					if (!nombre.getText().isEmpty()) {
						mostrarPiloto.setText("Piloto: " + nombre.getText());
						nombreJugador = getTextoNombre().getText();
						IngNombre.setVisible(false);
					}
				}
			});
		}
		return Aceptar;
	}

	private JButton getCancelar() {
		if (Cancelar == null) {
			Cancelar = new JButton();
			Cancelar.setText("Cancelar");
			Cancelar.setBounds(new Rectangle(207, 96, 100, 25));
			Cancelar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					IngNombre.setVisible(false);
				}
			});
		}
		return Cancelar;
	}

	private JTextField getTextoNombre() {
		if (textoNombre == null) {
			textoNombre = new JTextField();
			textoNombre.setBounds(new Rectangle(122, 44, 185, 29));
			textoNombre.setFocusable(true);
		}
		return textoNombre;
	}

}